//必须带done回调 执行完成调用
import dayjs from 'dayjs'

export default function addTableData({ vm, action, done, eventName }) {
  let tableId = action.extension.moduleId.value && action.extension.moduleId.value[0]
  const saveApiConfig = {
    api: action.extension.api?.value,
    method: action.extension.method?.value,
    requestData: action.extension.requestData?.value,
  }
  if (tableId && vm.vuiComponents) {
    let _table = vm.vuiComponents[tableId]
    // 获取表格头配置
    const tableColumns = _table.self.info.extension.tableColumns ? _table.self.info.extension.tableColumns.value : []
    const rowData = {} // 待插入的行数据
    tableColumns.forEach((col) => {
      if (col.field) {
        // 只获取有field字段的表格头
        const moduleConfig = col.formModuleType.info.extension
        if (!moduleConfig) {
          // 没有开启编辑模式的直接赋值为空字符串
          rowData[col.field] = ''
          return
        }
        // 读取默认值配置
        let defaultVal = moduleConfig.defaultValue ? moduleConfig.defaultValue.value : ''
        if (col.formModuleType.type === 'uiTableSwitch' && moduleConfig.defaultValue) {
          // 开关组件获取默认值
          defaultVal = moduleConfig.defaultValue.value ? moduleConfig.activeValue.value : moduleConfig.inactiveValue.value
        } else if (col.formModuleType.type === 'uiTableDate' && moduleConfig.defaultValue) {
          // 时间类型赋默认值
          if (moduleConfig.defaultValue.value === 'now') {
            switch (moduleConfig.selection.value) {
              case 'date':
                defaultVal = dayjs().format('YYYY-MM-DD')
                break
              case 'datetime':
                defaultVal = dayjs().format('YYYY-MM-DD HH:mm:ss')
                break
              case 'month':
                defaultVal = dayjs().format('MM')
                break
              default:
                defaultVal = ''
                break
            }
          }
        }

        // 记录列值
        if (col.formModuleType.type === 'uiTableSwitch' && moduleConfig.defaultValue && col.field !== col.formModuleType.model) {
          // 需要带出描述值的情况
          rowData[col.formModuleType.model] = defaultVal
          rowData[col.field] = moduleConfig.defaultValue.value ? moduleConfig.activeText?.value : moduleConfig.inactiveText?.value
        } else {
          rowData[col.field] = defaultVal
        }
      }
    })

    // 将值插入表格
    // console.log(rowData, _table.self.info.data.requestData)
    if (!_table.self.info.data.requestData.data) _table.self.info.data.requestData.data = []
    _table.self.info.data.requestData.data = [rowData, ..._table.self.info.data.requestData.data]
    // 进入编辑模式
    vm.$nextTick(() => {
      // 切换表格数据选中状态
      if (_table.ref) {
        const rowData = _table.ref.getData(0)
        _table.self.setRadioCheckboxRow({ row: rowData })
        // 先退出表格編輯模式
        _table.self.isNotSaveData = true
        _table.ref.clearEdit()
      }

      // 将保存接口传递给表格组件; 等待表格保存接口调用之后运行下一步动作
      _table.self.enterEditModel && _table.self.enterEditModel(true, { saveApiConfig, vm, done, eventName })
    })
  } else {
    done(null, {})
  }
}
